#ifndef COMMANDLINEARGUMENTS_H_
#define COMMANDLINEARGUMENTS_H_
#include <vector>
using std::vector;

typedef bool (*CLA_Callback)(char *);

class CommandLineArguments
{
public:
	static CommandLineArguments &GetInstance();

	void Add(char *_szArg, char *_szDescription, CLA_Callback _pCallback);
	bool Parse(int argc, char **argv);

	char *CheckValue(char *_szArg);

	struct Argument
	{
		char *szArg;
		char *szDescription;
		char *szValue;
		CLA_Callback pCallback;
	};

private:
	CommandLineArguments();

	// Disabled:
	CommandLineArguments(const CommandLineArguments &);
	CommandLineArguments &operator =(const CommandLineArguments &);

	// Internal variables:
	static const char m_prefix = '-';
	vector<Argument> m_ArgumentList;

	friend bool PrintHelp(char *);
};
bool PrintHelp(char *);
#endif